package com.kerrykidz.filemanagement.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.kerrykidz.filemanagement.dao.model.HisTicketEntity;
import com.kerrykidz.filemanagement.dao.model.UserInOutCombEntity;
import com.kerrykidz.filemanagement.dao.model.VipUserEntity;
import com.kerrykidz.membership.dao.model.CusGuaEntity;
import com.kerrykidz.membership.dao.model.CusMemClassEntity;
import com.kerrykidz.membership.dao.model.CusMemEntity;
import com.kerrykidz.membership.dao.model.CusMemSuspendEntity;
import com.kerrykidz.sales.dao.model.PosOrderEntity;
import com.kerrykidz.sales.dao.model.PosOrderPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.GblScmPrdEntity;
import com.kerrykidz.system.vo.UserInfo;
import com.rdp.framework.core.model.MyBatisSuperModel;
import com.rdp.framework.exception.RDPException;

/**
 * 会员管理服务接口
 * @author yanan
 *
 */
public interface IVipService {
	
	public List<VipUserEntity> listVipUser(MyBatisSuperModel model);
	
	/**
	 * @param memberId
	 * @return
	 */
	public List<UserInOutCombEntity> listVipInOutHis(List<String> memberIdList); 
	
	/**
	 * 更新会员信息
	 * @param obj
	 * @throws RDPException
	 */
	public void updateVip(CusMemEntity obj) throws RDPException;
	
	/**
	 * 创建会员
	 * @param obj
	 * @throws RDPException
	 */
	public void createVip(CusMemEntity obj) throws RDPException;
	
	/**
	 * 创建监护人
	 * @param cuardian
	 * @throws RDPException
	 */
	public void createGuardian(CusGuaEntity cuardian) throws RDPException;
	
	/**
	 * 编辑监护人
	 * @param cuardian
	 * @throws RDPException
	 */
	public void updateGuardian(CusGuaEntity cuardian) throws RDPException;
	
	/**
	 * 获取监护人信息
	 * @param memberId
	 * @param guaId
	 * @return
	 * @throws RDPException
	 */
	public CusGuaEntity getGuaByMemberIdAndGuaId(String memberId,String guaId)throws RDPException;
	
	/**
	 * 获取监护人信息
	 * @param memberId
	 * @param guaId
	 * @return
	 * @throws RDPException
	 */
	public List<HisTicketEntity> getBuyTicketHisList(List<String> memberIdList);
	
	/**
	 * 根据监护人电话号码/电子邮件查询所属会员信息
	 * 
	 * @param telnum
	 *            监护人电话号码
	 * @return
	 * @throws RDPException
	 */
	public List<VipUserEntity> findMemberByTelOrEmail(MyBatisSuperModel model);
	
	/**
	 * 根据会员ID查询会员所购会籍商品
	 * 
	 * @param pkMemId
	 * @return
	 * @throws RDPException
	 */
	public GblScmPrdEntity getPrdByMemberId(@Param("pkMemId") String pkMemId);
	
	/**
	 * 
	 * @Description 创建未付款订单、购物车(加购买课程历史记录)
	 * @param order
	 *            订单信息 （PK，OPERATE_TIME这些字段我会在后面执行时set value）
	 * @param products
	 *            创建订单对应的商品信息
	 * @return 订单主键
	 * @author QUINN
	 * @throws Exception
	 *             开发人员捕获该异常获取异常信息
	 * @date 2014年8月6日下午2:40:03
	 */
	public String createNotPayOfOrder(PosOrderEntity order, List<PosOrderPrdEntity> products, UserInfo user, List<CusMemClassEntity> cusMemClassList)throws Exception;
	
	/**
	 * 根据停卡ID查询会员会员停卡记录(唯一)
	 * 
	 * @param memberId
	 *            会员编号
	 * @return
	 */
	public CusMemSuspendEntity getUniSuspendByMemberId(@Param("memberId") String memberId);
	
	/**
	 * 根据批次号查询进场数量
	 */
	public Integer findCountByFambatch(@Param("famBatch") String famBatch) throws RDPException;
	
	/**
	 * 查询订单明细的成人票数量
	 * @param pkOrderId:订单Id
	 * @return
	 */
	public Integer getTicketCount(@Param("pkOrderId") String pkOrderId);
	
	/**
	 * 查询订单明细的成人票数量
	 * @param pkOrderId:订单Id
	 * @return
	 */
	public Integer getTicketCountContainone(@Param("pkOrderId") String pkOrderId);
}
